Skip to content

Improvement: safeguards for automatic releases, the review queue and community expectations - #897

Merged
repeat98 merged 2 commits into
mainfrom
claude/maintainer-safeguards
Oct 25, 2026
Merged

repeat98 merged 2 commits into
mainfrom
claude/maintainer-safeguards

Conversation

@repeat98

@repeat98 repeat98 commented Oct 25, 2026 •

Copy link
Copy Markdown
Owner

These are the safeguards we picked after the "Die Open Source Community bricht zusammen" video (The Morpheus, May 2026): xz-style trust capture, AI-cheap contributions, one maintainer carrying the review load, and hostile users.

What was wrong or hard:

  • A registered author's update (or a stolen author account) could auto-publish any code inside its own module folder. Followers were told right away, and the owner learned of it only from GitHub's general notifications.
  • Red pull requests sat in the owner's review list, and the template had 18 checkboxes an agent ticks in a second, most of them for things CI already enforces.
  • Nothing told players that module authors owe no fix or reply time, or how moderation escalates.

What this changes:

  1. Auto-release guard (scripts/author-update-git.mjs)
    • An author update whose source names a 32-bit address (0x + 8 hex digits) that the published version never named goes to owner review. The bot posts the reason on the PR once.
    • Replayed over the last 250 merged PRs: 10 of 44 module updates would have gone to owner review, all of them feature updates adding hooks or stock calls (for example Apply Scene +21 and Play Modes 0.2.0 +10). Bug fixes and tuning stay automatic.
    • It's a tripwire, not a sandbox: an address computed at run time passes.
  2. Owner notice. After every automatic merge the bot comments on the PR with an @mention of the owner and a compare link.
  3. 48-hour follower hold
    • verify-merge-approval.mjs hands the bot-merged modules to the build, and module-releases.json marks them authorRelease.
    • Migration 0082 adds module_releases.notify_after. The Worker stores the hold on first sight, and the hourly sync queues followers once it ends.
    • A newer version published during the hold replaces the held one, so followers only hear about the replacement. Owner releases stay immediate.
  4. PR triage (scripts/pr-triage.mjs, hourly, reads API metadata only, no PR code)
    • A red PR gets the needs-work label and one comment, and loses the label when its checks go green.
    • It closes 14 days after labelling if there's no new commit.
    • A contributor without a published module gets one module PR reviewed at a time (one-at-a-time).
    • The owner's review list: is:pr is:open draft:false -label:needs-work -label:one-at-a-time.
  5. PR template: 18 → 6 checkboxes. What CI enforces is one line about pr:ready. What stays is what no check can prove (guide read, rights and no firmware, real screenshots and hardware results), the author opt-in lines (unchanged, the workflow parses them) and one reviewer box.
  6. Community expectations
    • The report forms (module, Digitakt/Digitone, configuration) and the forum's "Keep it kind" tip now say that authors owe no fix or reply time, linking to the rules.
    • Community rules (EN + DE) gain "What to expect from module authors" and the moderation steps: reminder, hidden content, temporary suspension, permanent suspension.
    • CODE_OF_CONDUCT.md covers GitHub.
    • Saved replies are in COMMUNITY_OPERATIONS.md.
  7. Policy text: registered authors keep two-factor authentication on (a condition, since GitHub can't verify it), and release authority grows slowly and stays narrow.

How I checked it:

Owner decisions before merge:

Open gaps, not fixed here:

  • Digitakt/Digitone .elemod files under vendor/elekloader/catalog/ are checked for their approved stock targets, but their code isn't proven to come from the reviewed source, and the address guard can't see inside them. The 48-hour hold and the owner notice still apply to them.
  • A rare ordering can skip the hold: if the deploy notice for an author release fails and the next deploy is an owner commit before the hourly sync runs, followers are told right away.

What the guides lacked or got wrong, and where I fixed it: the author-update guide didn't say what stops a hijacked author account. That's now in MODULE_AUTHOR_UPDATES.md; triage is under Make it mergeable.

🤖 Generated with Claude Code

…community expectations

- Author auto-release: an update that names a 32-bit address its published
  source never named goes to owner review, with the reason posted on the PR.
- The owner is mentioned on every automatic release, with the exact diff.
- Followers hear about an automatic release 48 hours after it goes live
  (authorRelease in module-releases.json, notify_after hold, migration 0082);
  a newer version published during the hold replaces the held one.
- Hourly PR triage: red PRs get needs-work and leave the review queue, close
  after 14 quiet days; a second module PR from someone without a published
  module waits as one-at-a-time.
- PR template keeps only what no check can prove (18 boxes to 6).
- Report forms, forum tips and community rules say what to expect from module
  authors and how moderation escalates; CODE_OF_CONDUCT.md for GitHub.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added the enhancement New feature or request label Oct 25, 2026
…eguards

# Conflicts:
#	.github/pull_request_template.md
@repeat98
repeat98 merged commit 97acebf into main Oct 25, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant